/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package praticav.dao;

import praticav.model.AtividadesRealizadas;
import praticav.util.HibernateUtil;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import praticav.model.AtividadesRealizadasPK;

/**
 * @author Katiane
 */
public class AtividadesRealizadasDAO {
    public AtividadesRealizadasDAO() {
  sessao = HibernateUtil.getsession();
  }
    
  private Session sessao;
  
  public void inserir(AtividadesRealizadas c) {
    Transaction t = sessao.beginTransaction();
    AtividadesRealizadasPK chave = new AtividadesRealizadasPK();
    chave = c.getChave();
    chave.setAtirealcodigo(Integer.parseInt(""+getMaxID(c.getChave().getFase().getChave().getProducao().getProcodigo(), c.getChave().getFase().getChave().getFascodigo()))+1);
    c.setChave(chave);
    sessao.save(c);
    t.commit();
  }
  
  public void editar(AtividadesRealizadas c) {
    Transaction t = sessao.beginTransaction();
    sessao.merge(c);
    t.commit();    
  }
  
  public void excluir(AtividadesRealizadas c) {
    Transaction t = sessao.beginTransaction();
    sessao.delete(c);
    t.commit();
  }
  
  public AtividadesRealizadas buscar(AtividadesRealizadasPK chave){
      
    return (AtividadesRealizadas) sessao.load(AtividadesRealizadas.class, chave);
  }   
  
  public List<AtividadesRealizadas> listar() {
    Query qu = sessao.createQuery("from AtividadesRealizadas"); 
    return qu.list();
  }
  public List<AtividadesRealizadas> listar(int ProCodigo, int FasCodigo, int AtiRealCodigo, String AtiDescricao, String DtaInicialInicial, String DtaInicialFinal, String DtaFinalInicial, String DtaFinalFinal) {
  String condicoes = "";
  Integer primeiro=0;
  if (ProCodigo > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      
      condicoes += "ProCodigo = "+ProCodigo;
  }
  if (FasCodigo > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";      
      condicoes += "FasCodigo = "+FasCodigo;  
  }
  if (AtiRealCodigo > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";      
      condicoes += "AtiRealCodigo = "+AtiRealCodigo;  
  }
  if (AtiDescricao.length() > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      condicoes += "AtiRealDescricao like %'"+AtiDescricao+"'";    
  }
  if (DtaInicialInicial.length() > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      condicoes += "AtiRealDtaInicial >= '"+DtaInicialInicial+"'";      
  }
  if (DtaInicialFinal.length() > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      condicoes += "AtiRealDtaInicial <= '"+DtaInicialFinal+"'";      
  }  
  if (DtaFinalInicial.length() > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      condicoes += "AtiRealDtaFinal >= '"+DtaFinalInicial+"'";      
  }
  if (DtaFinalFinal.length() > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      condicoes += "AtiRealDtaFinal <= '"+DtaFinalFinal+"'";      
  }  
    Query qu = sessao.createQuery("from AtividadesRealizadas "+condicoes); 
    return qu.list();
  }    
  public List<AtividadesRealizadas> listar(int ProCodigo, int FasCodigo, int AtiPlanCodigo) {
  String condicoes = "";
  Integer primeiro=0;
  if (ProCodigo > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";
      
      condicoes += "ProCodigo = "+ProCodigo;
  }
  if (FasCodigo > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";      
      condicoes += "FasCodigo = "+FasCodigo;  
  }
  if (AtiPlanCodigo > 0){
      if (primeiro == 0){//Se for a primeira vez, adiciona "where", senão, adiciona "and"
          condicoes += " where ";
          primeiro = 1;
      }
      else
          condicoes += " and ";      
      condicoes += "AtiPlanCodigo = "+AtiPlanCodigo;  
  }
    Query qu = sessao.createQuery("from AtividadesRealizadas "+condicoes); 
    return qu.list();
  }    
    private int getMaxID(int ProCodigo, int FasCodigo)  
    {  
        Object obj = sessao.createSQLQuery("SELECT MAX(atirealcodigo) FROM AtividadesRealizadas where ProCodigo = "+ProCodigo + " and FasCodigo = "+FasCodigo).uniqueResult();  
        if(obj==null)  
            return 0;  
        return Integer.parseInt( obj.toString());  
    }   
  public List<AtividadesRealizadas> listar(int ProCodigo) {
    Query qu = sessao.createSQLQuery("Select f.fasdescricao, at.*, coalesce((select sum(arr.arrquantidade*arr.arrvalorunitario)"
                                                                                                                + "from atividadesrealizadas_recursos arr "
                                                                                                                + "where arr.atirealcodigo = at.atirealcodigo "
                                                                                                                + "and arr.fascodigo = f.fascodigo "
                                                                                                                + "and arr.procodigo = "+ProCodigo+"),0) aticustoefetivo"
                                    + " from atividadesrealizadas at, fases f"
                                    + " where f.FasCodigo = at.FasCodigo and at.ProCodigo = "+ProCodigo+" and f.procodigo = "+ProCodigo+""
                                    + " order by f.fascodigo, at.atirealcodigo").addEntity("at",AtividadesRealizadas.class); 

    //Query qu = sessao.createSQLQuery("Select * from fases ");
    /*
     * Select f.fascodigo, f.fasdescricao, at.atiplancodigo, at.atiplandescricao, (select sum(apr.aprquantidade*apr.aprvalorunitario) 
								            from atividadesplanejadas_recursos apr 
								            where apr.atiplancodigo = at.atiplancodigo 
								              and apr.fascodigo = f.fascodigo 
								              and apr.procodigo = 1) aticusto
    from atividadesplanejadas at, fases f
    where f.FasCodigo = at.FasCodigo and at.ProCodigo = 1 and f.procodigo = 1
    order by f.fascodigo, at.atiplancodigo
     */
    return qu.list();
  }
}
